/**
 * @class Ext.ux.ProgressBar
 */
Ext.ux.ProgressBar=function(config){
	this.config=config;
	/**
	 * 进度条的el
	 */
	this.el=this.config.el||'';

	//this.id=this.config.id||0;
	/**
	 * 此进度条的labelText
	 */
	this.labelText=this.config.labelText||'';
	/**
	 * 与进度条相关连的上传字段
	 */
	this.relatingField=this.config.relatingField||null;
	/**
	 * @param {String} resetText
	 * 重置进度条字符串
	 * @param {String} text
	 * 进度条中显示的字符串
	 */
	this.resetText=this.text=this.config.text||'';
	/**
	 * 结束进度条字符串
	 */
	this.doneText=this.config.doneText||'';
	/**
	 * @param {String}
	 * 查询后台进度的URL
	 */
	this.url=this.config.url||'';
	/**
	 * @param {int} 
	 * 查询后台的时间间隔
	 */
	this.interval=this.config.interval||500;
	/**
	 * @param {String}
	 * 进度结束后想后台发送结束信息的URL
	 */
	this.resetProgressURL=this.config.resetProgressURL;
	/**
	 * Ext.util.TaskRunner调用的查询后台进度的任务
	 */
	this.task=null;
	
	/**
	 * 开始的函数
	 */
	this.start=this.config.start||this.start;
	
	/**
	 * 进度条的UI
	 */
	this.progressBar=new Ext.ProgressBar({
		text:this.text,
		id:this.id,
		el:this.el
	});
	/**
	 * @param {Ext.util.TaskRunner}
	 * 调用任务的Ext.util.TaskRunner对象
	 */
	this.taskRunner=this.config.taskRunner;
	this.failMes=this.config.failMes||'上传失败,请联系管理员!';
	this.isRequestBack=true;
};
Ext.ux.ProgressBar.prototype={
	/**
	 * 渲染进度条并启动进度条的任务
	 */
	start:function(){	
		this.reset();
		this.resetProgress();
		this.task={
			progressBar:this,
			run:function(){
				if(!this.progressBar.isRequestBack){
					return ;
				}
				this.isRequestBack=false;
				Ext.Ajax.request({					//调用Ajax发送请求到后台
					scope:this.progressBar,
					url:this.progressBar.url,					//删除grid数据的url.
					success:function(transport){				//处理成功后返回的函数
						var oXmlDom=transport.responseText;
						var progressInfo=Ext.decode(oXmlDom);
						if(progressInfo!=undefined&&progressInfo.value!=undefined&&progressInfo.text!=undefined){
							this.update(progressInfo.value,'已传了'+progressInfo.text);
						}	
						this.isRequestBack=true;						
						if(parseFloat(progressInfo.value)==1){
							this.stop();
						}
					},
					failure:function(){				//处理后台删除失败的函数
						this.stop();
						Ext.MessageBox.alert('消息',this.failMes);
					},
					params:{
						formIndex:this.progressBar.relatingField.tabIndex
					}
				});
			},
			interval:this.interval
		}
		this.progressBar.render();
		this.taskRunner.start(this.task);
	},
	/**
	 * 更新进度条的数据
	 * @param {Float} value
	 * 浮点数,0-1之间的数(例如.5)
	 * @param {String} text
	 * 显示在进度条的中的字符串
	 */
	update:function(value,text){
		if(value==1){	
			this.progressBar.updateProgress(value,this.doneText);
			this.stop();
		}else{
			this.progressBar.updateProgress(value,text);
		}
	},
	complete:function(){
		this.update(1);
	},
	/**
	 * 停止进度条的任务
	 */
	stop:function(){
		this.taskRunner.stop(this.task);
	},
	/**
	 * @param {Ext.util.TaskRunner()} taskRunner
	 * 设置进度条的Ext.util.TaskRunner()
	 */
	setTaskRunner:function(taskRunner){
		this.taskRunner=taskRunner;
	},
	/**
	 * 设置此进度条的label
	 * @param {String} text
	 * label的字符串
	 */
	setLabelText:function(text){
		this.labelText=text;
	},
	/**
	 * 重新设置进度条的label
	 */
	resetLabelText:function(){
		if(this.relatingField){
			this.setLabelText(this.relatingField.getValue());
		}
	},
	/**
	 * 向后台发送结束信息的函数
	 */
	resetProgress:function(){
		Ext.Ajax.request({
			url:this.resetProgressURL,
			params:{
				formIdex:this.relatingField.tabIndex
			}
		});
	},
	/**
	 * 重置进度条的数据
	 */
	reset:function(){
		this.progressBar.updateProgress(0,this.resetText);
	}
	
};